<?php
/**
 * Created by JetBrains PhpStorm.
 * User: BLB
 * Date: 23-6-11
 * Time: 14:29
 * To change this template use File | Settings | File Templates.
 */
require_once(Config::acquire('Model', null, 'model'));
require_once(Config::acquire('Diensten', MODEL));
require_once(Config::acquire('Gebruiker', MODEL));
require_once(Config::acquire('Medewerker', MODEL));
require_once(Config::acquire('Sla', MODEL));
require_once(Config::acquire('Hardware', MODEL));


class Incident extends Model
{

    /**
     * initialiseren variabelen
     */
    private $id;
    private $omschrijving;
    private $afgehandeld;
    private $diensten;
    private $gebruiker;
    private $medewerker;
    private $sla;
    private $hardware;
    private $tijd;
    private $tijdafgerond;


     /**
     * aanmaken van de vriabelen
     */
    public function __construct($id, $omschrijving, $afgehandeld, Diensten $diensten, Gebruiker $gebruiker, Medewerker $medewerker, Sla $sla, Hardware $hardware, $tijd, $tijdafronding)
    {
        $this->id = $id;
        $this->omschrijving = $omschrijving;
        $this->afgehandeld = $afgehandeld;
        $this->diensten = $diensten;
        $this->gebruiker = $gebruiker;
        $this->medewerker = $medewerker;
        $this->sla = $sla;
        $this->hardware = $hardware;
        $this->tijd = $tijd;
        $this->tijdafgerond = $tijdafronding;

    }


    /**
     * Query voor deleten van de gegevens uit de gegeven tabel
     */
    public function delete()
    {
        SQL::execute("DELETE FROM `incident` WHERE `Incident_ID` = {$this->id}");
    }

    /**
     * gegevens naar een array schrijven.
     */
    public function toArray()
    {
        return array(
            "ID" => $this->id,
            "Omschrijving" => $this->omschrijving,
            "Afgehandeld" => $this->afgehandeld,
            "Dienst_ID" => $this->diensten->getID(),
            "Dienst_Naam" => $this->diensten->getOmschrijving(),
            "Gebruiker_ID" => $this->gebruiker->getID(),
            "Gebruiker_Naam" => $this->gebruiker->getNaam(),
            "Medewerker_ID" => $this->medewerker->getID(),
            "Medewerker_Naam" => $this->medewerker->getVoornaam(),
            "Sla_ID" => $this->sla->getId(),
            "Sla_Naam" => $this->sla->getOmschrijving(),
            "Sla_Prioriteit" => $this->sla->getPrioriteit(),
            "Hardware_ID" => $this->hardware->getID(),
            "Hardware_Naam" => $this->hardware->getNaam(),
            "Tijd" => $this->tijd,
            "Tijdafgerond" => $this->tijdafgerond
        );
    }

    /**
     * Query voor het updaten van de betreffende tabel
     */
    public function update()
    {
        if (!is_null($this->id)) {
            SQL::execute("UPDATE `incident`
                      SET `Incident_Omschrijving` = '{$this->omschrijving}',
                          `Afgehandeld` = '{$this->afgehandeld}',
                          `Dienst_ID` = '{$this->diensten->getId()}',
                          `Gebruiker_ID` = '{$this->gebruiker->getId()}',
                          `Medewerker_ID` = '{$this->medewerker->getId()}',
                          `Sla_ID` = '{$this->sla->getId()}',
                          `Hardware_ID` = '{$this->hardware->getId()}',
                          `Tijd` = '{$this->tijd}',
                          `Tijd_Afgerond` = '{$this->tijdafgerond}'


                      WHERE `Incident_ID` = {$this->id}");

        } else {
            SQL::execute("INSERT INTO `incident` (
                            `Incident_ID`, `Incident_Omschrijving`, `Afgehandeld`, `Dienst_ID`,`Gebruiker_ID`, `Medewerker_ID`, `Sla_ID`, `Hardware_ID`, `Tijd`, `Tijd_Afgerond`)
                             VALUES (NULL ,
                              '$this->omschrijving',
                              'nee',
                              '{$this->diensten->getId()}',
                              '{$this->gebruiker->getId()}',
                              '{$this->medewerker->getId()}',
                              '{$this->sla->getId()}',
                              '{$this->hardware->getId()}',
                              '{$this->tijd}',
                              '{$this->tijdafgerond}')");

        }
    }


    public function Afhandelen()
    {

            SQL::execute("UPDATE `incident`
                              SET `Afgehandeld` = 'ja',
                                  `Tijd_Afgerond` = '".date('Y-m-d H:i:s')."'
                                  WHERE `Incident_ID` = {$this->id}");

    }

     /**
     * aanmaken van een nieuw item
     */
    public static function create($id, $omschrijving, $afgehandeld, Diensten $diensten, Gebruiker  $gebruiker, Medewerker $medewerker, Sla  $sla, Hardware  $hardware, $tijd, $tijdafronding)
    {
        return new Incident($id, $omschrijving, $afgehandeld, $diensten, $gebruiker, $medewerker, $sla, $hardware, $tijd, $tijdafronding);
    }


     /*
     * lezen van de gegvens van 1 enkel item
     */
    public static function read($id)
    {
        $incident = SQL::query("SELECT * FROM `incident` where Incident_ID = $id");

        if ($incident->isValid()) {
            return Incident::create(
                $incident->fetchField('Incident_ID'),
                $incident->fetchField('Incident_Omschrijving'),
                $incident->fetchField('Afgehandeld'),
                Diensten::read($incident->fetchField('Dienst_ID')),
                Gebruiker::read($incident->fetchField('Gebruiker_ID')),
                Medewerker::read($incident->fetchField('Medewerker_ID')),
                Sla::read($incident->fetchField('Sla_ID')),
                Hardware::read($incident->fetchField('Hardware_ID')),
                $incident->fetchField('Tijd'),
                $incident->fetchField('Tijd_Afgerond'));
        } else {
            return null;
        }
    }


    /**
     * Lezen van de gegevens in een tabel
     */
    public static function readAll()
    {
        $list = array();
        $incident = SQL::query("SELECT * FROM `incident`");
        while ($incident->isValid()) {
            $list[] = Incident::create(
                $incident->fetchField('Incident_ID'),
                $incident->fetchField('Incident_Omschrijving'),
                $incident->fetchField('Afgehandeld'),
                Diensten::read($incident->fetchField('Dienst_ID')),
                Gebruiker::read($incident->fetchField('Gebruiker_ID')),
                Medewerker::read($incident->fetchField('Medewerker_ID')),
                Sla::read($incident->fetchField('Sla_ID')),
                Hardware::read($incident->fetchField('Hardware_ID')),
                $incident->fetchField('Tijd'),
                $incident->fetchField('Tijd_Afgerond'));


            $incident->next();
        }
        return $list;
    }




    /**
     * Setters & getters
     */
    public function setOmschrijving($omschrijving)
    {
        $this->omschrijving = $omschrijving;
    }

    public function getOmschrijving()
    {
        return $this->omschrijving;
    }
    /**
     * lezen van de keuze afgehandeld zo nee maak nieuw incident aan
     */
    public static function readAfgehandeld()
          {
              $list = array();
              $incident = SQL::query("SELECT * FROM `incident` WHERE `Afgehandeld` = 'nee'");
              while ($incident->isValid()) {
                  $list[] = Incident::create(
                      $incident->fetchField('Incident_ID'),
                      $incident->fetchField('Incident_Omschrijving'),
                      $incident->fetchField('Afgehandeld'),
                      Diensten::read($incident->fetchField('Dienst_ID')),
                      Gebruiker::read($incident->fetchField('Gebruiker_ID')),
                      Medewerker::read($incident->fetchField('Medewerker_ID')),
                      Sla::read($incident->fetchField('Sla_ID')),
                      Hardware::read($incident->fetchField('Hardware_ID')),
                      $incident->fetchField('Tijd'),
                      $incident->fetchField('Tijd_Afgerond'));


                  $incident->next();
              }
              return $list;
          }
        

    public function setTijd($tijd)
    {
        $this->tijd = $tijd;
    }

    public function getTijd()
    {
        return $this->tijd;
    }

    public function setDiensten($diensten)
    {
        $this->diensten = $diensten;
    }

    public function getDiensten()
    {
        return $this->diensten;
    }

    public function setGebruiker($gebruiker)
    {
        $this->gebruiker = $gebruiker;
    }


    public function setSla($sla)
    {
        $this->sla = $sla;
    }

    public function setMedewerker($medewerker)
    {
        $this->medewerker = $medewerker;
    }

    public function setHardware($hardware)
    {
        $this->hardware = $hardware;
    }

    public function setId($id)
    {
        $this->id = $id;
    }

    public function getId()
    {
        return $this->id;
    }


}
